package top.infopub.mgr.bpa.service;


import java.util.List;

import top.infopub.generic.GenericService;
import top.infopub.mgr.bpa.domain.OtherCotDomain;
import top.infopub.mgr.bpa.vo.OtherCotVo;
import top.infopub.mgr.bpast.domain.BpastOtherDomain;
import top.infopub.model.bpa.OtherCot;
import top.infopub.model.bpa.OtherCotAtt;
import top.infopub.model.bpa.OtherCotDetail;
import top.infopub.model.bpa.OtherCotList;
import top.infopub.model.bpa.OtherCotNode;
import top.infopub.model.bpa.OtherCotSub;

import com.github.pagehelper.Page;


public interface OtherCotService extends GenericService<OtherCot, String> {

    /**
     * 根据条件查询其他费合同记录
     * @param OtherCotVo
     * @return 
     * @see
     */
    Page<OtherCotDomain> selectByDomainWhere(Page<OtherCotDomain> page, OtherCotVo otherCotVo);

    /**
     * 根据条件查询其他费合同记录--我审批的列表
     * @param OtherCotVo
     * @return 
     * @see
     */
    Page<OtherCotDomain> selectMyCheckByDomainWhere(Page<OtherCotDomain> page,
                                                    OtherCotVo otherCotVo);

    /**
     * 执行新增
     */
    void saveOtherCot(OtherCot otherCot, List<OtherCotSub> otherCotSubs,
                      List<OtherCotList> otherCotLists, List<OtherCotDetail> otherCotDetails,
                      List<OtherCotNode> otherCotNodes, List<OtherCotAtt> otherCotAtts);

    /**
     * 判断其他费合同名称是否存在
     */
    List<OtherCot> isExistOtherCotName(String otherCotName,String proCode);

    /**
     * 判断其他费补充合同名称是否存在
     */
    List<OtherCot> isExistOtherCotSaName(String otherCotSaName,String proCode);

    /**
     * 根据项目编号取最新的其他费合同信息
     */
    OtherCotDomain selectNewsByProCode(String proCode);

    /**
     * 根据项目编号获取最新的版本号
     */
    OtherCot selectaVersionByProCode(String proCode);

    /**
     * 根据项目编号获取父id
     */
    OtherCot selectByProCodes(String proCode);

    /**
     * 根据id查询详情
     * @param id
     * @return 
     * @see
     */
    OtherCotVo queryById(String id);

    /**
     * 根据合同名称计算对内结算中的 期数(已审批通过)
     */
    int countByName(String names);

    /**
     * 根据项目编号获取最新的信息
     */
    OtherCot selectAddTimeByProCode(String proCode);

    /**
     * 根据id查询信息
     */
    OtherCotDomain selectByIds(String id);

    /**
     * 补充签订
     */
    void sign(OtherCotVo otherCotVo, List<OtherCotAtt> otherCotAtts);
    
    /**
     * 查询所有其他费合同信息
     */
    List<OtherCot> selectByOtherCots();
    
    /**
     * 根据条件查询商务驾驶舱-其他合同分页记录
     * @param page 分页参数
     * @param type 公司类型
     * @param orgId 公司id
     * @param proName 项目名称
     * @param extType 合同类别
     * @param contractName 合同名称
     * @return 
     * @see
     */
    Page<BpastOtherDomain> selectBpastByDomainWhere(Page<BpastOtherDomain> page,String type, String orgId,
        String proName,String extType,String contractName);

}